<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 深拷贝拷贝多层，每一级别的数据都会拷贝
        var obj = {
            id: 1,
            name: 'andy',
            msg: {
                age: 24,
            },
            color: ['red', 'purple'],
        };
        var o = {};
        //封装函数
        function deepCopy(newObj, oldObj) {
            for (var k in oldObj) {
                // console.log(k + ':' + obj[k]);
                // 1. 获取属性值
                var item = oldObj[k];

                // 2. 判断是否为数组
                // 数组也是Object，因此写前面
                if (item instanceof Array) {
                    newObj[k] = [];
                    // o.color= ['red','purple']
                    deepCopy(newObj[k], item);
                } else if (item instanceof Object) {
                    // 3. 判断是否为对象
                    newObj[k] = {};
                    //o.msg = {
                    // age: 24
                    // };
                    deepCopy(newObj[k], item);
                } else {
                    // 4.属于基本数据类型
                    newObj[k] = item;
                }
            }
        }
        deepCopy(o, obj);
        console.log(o);
        o.msg.age = 16;
        console.log(obj);

        // 只适用于纯数据json对象的深度克隆
        var clone = function (obj) {
            return JSON.parse(JSON.stringify(obj));
        }
    </script>
</body>

</html>